1
Oltre gli array lineari: Scalabilità verso dati multidimensionali
AI032Lesson 4
00:00

Benvenuto in Il grande passaggio. Nella programmazione per CPU, definiamo come iterare; nel GPGPU, definiamo cosa sembra un'iterazione. Questo cambiamento dal modello basato su istruzioni a quello basato sui dati è alimentato dall' astrazione del kernel.

1. Il progetto __global__

Utilizzando il __global__ qualificatore, non stai scrivendo una funzione: stai progettando un progetto scalabile. Un'unica esecuzione del kernel rappresenta un'unità autonoma di lavoro, consentendo alla GPU di orchestrare migliaia di compiti identici su un numero elevatissimo di core senza gestione manuale dei thread.

2. Il risolutore di indirizzi globale

Come fa un singolo thread tra milioni a trovare il proprio obiettivo? Utilizza un contratto deterministico noto come formula di indicizzazione:

$$\text{threadID} = \text{blockIdx.x} \times \text{blockDim.x} + \text{threadIdx.x}$$

Questa formula agisce come un sistema di coordinate, collegando i dati logici del software (l'array) all'architettura fisica dell'hardware (blocchi e thread).

Array della memoria globale (10 milioni di elementi)Blocco 0Blocco 1Blocco N-1indice = 1 * blockDim + threadIdx

3. Configurazione dell'esecuzione

I parametri <<<B, T>>> definiscono la forma della griglia. Ciò garantisce Scalabilità trasparente: il tuo codice esegue la stessa logica indipendentemente dal fatto che l'hardware abbia 2 SM o 80 SM.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>